package org.ymf.controller;

import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.MultipartFile;
import com.github.pagehelper.PageInfo;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.layuiframework.stereotype.util.ValidGroup;
import java.util.ArrayList;
import java.util.List;
import org.ymf.service.ChartService;
import org.ymf.entity.Chart;
import org.ymf.vo.ChartVo;
import lombok.Data;
import org.springframework.web.bind.annotation.RestController;

/**
 * <p>
 * 图表信息表 前端控制器
 * </p>
 *
 * @author Malphite
 * @since 2023-08-01
 */
@Data
@RestController
@RequestMapping("/chart")
public class ChartController {

    @Resource
    private ChartService chartService;


    /**
     * 分页查询图表信息表
     * @param vo        可选条件 图表名称(name)、 开始时间(startTime)、结束时间(endTime)、
     * @return          图表信息表分页信息
     */
    @PostMapping("/pageChart")
    public PageInfo<Chart> pageChart(@RequestBody ChartVo vo){
        return chartService.pageChart(vo);
    }

    /**
     * 列表查询图表信息表
     * @param vo        可选条件 图表名称(name)、 开始时间(startTime)、结束时间(endTime)、
     * @return          图表信息表列表信息
     */
    @PostMapping("/listChart")
    public List<Chart> listChart(@RequestBody ChartVo vo){
        return chartService.listChart(vo);
    }

    /**
     * 添加图表信息表基础信息
     * @param chart       图表信息表信息
     * @return          成功or失败
     */
    @PostMapping("/addChart")
    public boolean addChart(@RequestPart("file") MultipartFile multipartFile,  @Validated({ValidGroup.Insert.class}) Chart chart, HttpServletRequest request){
        return chartService.addChartSync(multipartFile, chart, request);
    }

    /**
     * 更新图表信息表基础信息
     * @param chart       图表信息表信息, 主键信息必填
     * @return          成功or失败
     */
    @PostMapping("/updateChart")
    public boolean updateChart(@RequestBody @Validated({ValidGroup.Update.class}) Chart chart){
        return chartService.updateChart(chart);
    }

    /**
     * 删除图表信息表基础信息
     * @param chart       图表信息表信息, 主键信息必填
     * @return          成功or失败
     */
    @PostMapping("/deleteChart")
    public boolean deleteChart(@RequestBody @Validated({ValidGroup.Delete.class}) Chart chart){
        return chartService.deleteChart(chart);
    }

    /**
     * 图表信息表excel导入
     * @param file 前端传入的文件[一个or多个，这里导入只整一个]
     * @param request 请求对象
     * @return          成功or失败
     */
    @PostMapping("/excelChart")
    public boolean excelChart(@RequestPart(value = "file") MultipartFile file, HttpServletRequest request){
        return chartService.excelChart(file, new ArrayList<>(), request) == null;
    }

    /**
     * 图表信息表excel导出
     * @param vo  页面传入参数(name:图表名称;startTime:开始时间;endTime:结束时间 )
     * @param response 响应对象
     * @return   无返回值，通过响应对象响应信息
     * @throws Exception  调用方法可能发生io异常等
     */
    @GetMapping("/exportChart")
    public void exportChart(ChartVo vo, HttpServletResponse response) throws Exception{
        chartService.exportChart(vo, response);
    }

     /**
     * 分页查询图表信息表 => 根据 lasticsearch 查询信息
     * @param vo        可选条件 图表名称(name)、 开始时间(startTime)、结束时间(endTime)、
     * @return          图表信息表分页信息
     */
     @PostMapping("/pageChartEs")
     public PageInfo<Chart> pageChartEs(@RequestBody ChartVo vo){
         return chartService.pageChartEs(vo);
     }

}
